/******************************************************************************

 @file sensor_data_generator.c

 @brief Sensor Data Generator Module for TI 15.4-Stack Sensor Example

 *****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
#include <math.h>
#include "mac_util.h"
#include "sensor_data_generator.h"
#include "smsgs.h"

/******************************************************************************
 Local function prototypes
 *****************************************************************************/
static float getRandomFloat(float min, float max);
static int getRandomInt(int min, int max);

/******************************************************************************
 Public Functions
 *****************************************************************************/

/*!
 * @brief       Generate random float number.
 */
static float getRandomFloat(float min, float max) {
    return min + ((float)rand() / RAND_MAX) * (max - min);
}

/*!
 * @brief       Generate random integer number.
 */
static int getRandomInt(int min, int max) {
    return min + rand() % (max - min + 1);
}

/*!
 * @brief       Generate vibration sensor data.
 */
void SensorDataGenerator_generateSensorData(Smsgs_vibrateSensorField_t *data) {
    // 填充时间戳
  /*  data->header.date[0] = 25; // 年
    data->header.date[1] = 4;     // 月
    data->header.date[2] = 7;        // 日
    data->header.date[3] = 16;        // 时
    data->header.date[4] = 36;         // 分
    data->header.date[5] = 59;         // 秒

    data->header.RPM = 1000 + getRandomInt(-100, 100); // RPM在900-1100之间波动*/
     
    // Fill data->sensors with simulated vibration data 
    /*
    uint8_t chl;//通道号
    uint8_t   res;
    uint16_t  vpp;//峰峰值
    uint16_t  rms;//均方根值
    uint16_t mean;//均值
    uint16_t  max;//最大值
    uint16_t  min;//最小值
    uint16_t  W;//波形指标
    uint16_t  C;//峰值指标
    uint16_t  I;//脉冲指标
    uint16_t  L;//裕度指标
    uint16_t  S;//偏斜度
    uint16_t  K;//峭度
    uint16_t  speed;//速度
    uint16_t  displacement;//位移
    
    for(int i = 0; i < 3; i++) {
        data->sensors[i].chl = i;  // 通道号
        data->sensors[i].res = getRandomInt(0, 100); // 随机分辨率
        data->sensors[i].vpp = getRandomInt(0, 100); // 随机峰峰值
        data->sensors[i].rms = getRandomInt(0, 100); // 随机均方根值
        data->sensors[i].mean = getRandomInt(0, 100); // 随机均值
        data->sensors[i].max = getRandomInt(0, 100); // 随机最大值
        data->sensors[i].min = getRandomInt(0, 100); // 随机最小值
        data->sensors[i].W = getRandomInt(0, 100); // 随机波形指标
        data->sensors[i].C = getRandomInt(0, 100); // 随机峰值指标
        data->sensors[i].I = getRandomInt(0, 100); // 随机脉冲指标
        data->sensors[i].L = getRandomInt(0, 100); // 随机裕度指标
        data->sensors[i].S = getRandomInt(0, 100); // 随机偏斜度
        data->sensors[i].K = getRandomInt(0, 100); // 随机峭度
        data->sensors[i].speed = getRandomInt(0, 100); // 随机速度
        data->sensors[i].displacement = getRandomInt(0, 100); // 随机位移
    }*/
}

/*!
 * @brief       Generate temperature and battery data.
 */
/*void SensorDataGenerator_generateTemplateBatData(Smsgs_vibrateTemplateBat_t *data) {
    data->date[0] = 25; // 年
    data->date[1] = 4;     // 月
    data->date[2] = 7;        // 日
    data->date[3] = 16;        // 时
    data->date[4] = 36;         // 分
    data->date[5] = 59;         // 秒
    data->Template = getRandomInt(0, 100); // 随机温度
    data->BAT = getRandomInt(0, 100); // 随机电池电量
    data->res = getRandomInt(0, 100); // 随机分辨率
}*/

/*!
 * @brief       Generate sampling configuration data.
 */
void SensorDataGenerator_generateSampleConfigData(Smsgs_vibrateSampleConfig_t *data) {
    data->uid[0] = 0x01; // 随机uid
    data->uid[1] = 0x02;
    data->uid[2] = 0x03;
    data->uid[3] = 0x04;
   /* data->FerqZ = getRandomInt(0, 6); // 随机频率
    data->LenZ = getRandomInt(0, 7); // 随机长度
    data->FerqXY = getRandomInt(0, 4); // 随机频率
    data->LenXY = getRandomInt(0, 4); // 随机长度
    data->HighLengthFerq = getRandomInt(0, 4); // 随机频率
    data->HighLength = getRandomInt(0, 3); // 随机长度
    data->sleepTimes = getRandomInt(0, 100); // 随机次数 
    data->RealDataTimes = getRandomInt(0, 100); // 随机次数
    */
}

/*!
 * @brief       Generate channel configuration data.
 */
void SensorDataGenerator_generateVibrateConfigData(Smsgs_vibrateChannelConfig_t *data, uint8_t channelIndex) {
    data->chl = channelIndex; // 随机通道号
    data->ena = getRandomInt(0, 1); // 随机使能
    data->ACC_Zero = getRandomInt(0, 100); // 随机零点
    data->ACC_Sens = getRandomInt(0, 100); // 随机灵敏度
    data->Speed_Zero = getRandomInt(0, 100); // 随机零点
    data->Speed_Sens = getRandomInt(0, 100); // 随机灵敏度  
    data->DISP_Zero = getRandomInt(0, 100); // 随机零点
    data->DISP_Sens = getRandomInt(0, 100); // 随机灵敏度
}

/*!
 * @brief       Generate temperature compensation configuration data.
 */
void SensorDataGenerator_generateVibrateTemplateConfigData(Smsgs_vibrateChannelTempConfig_t *data, uint8_t channelIndex) {
    data->chl = channelIndex; // 随机通道号
    data->ena = getRandomInt(0, 1); // 随机使能
    data->zero = getRandomInt(0, 100); // 随机零点
    data->sens = getRandomInt(0, 100); // 随机灵敏度
}

/*!
 * @brief       Generate continuous send raw data.
 */
void SensorDataGenerator_generateContinuousSendRawData(uint16_t packetIndex, uint8_t *data) {
    data = Util_bufferUint16((unsigned char *)data, packetIndex);

    uint16_t i;
    for(i = 0; i < 50; i++) { // 假设包大小为50
        data[i] = 0xAA;
    }
}

/*!
 * @brief       Generate ack data complete.
 */
void SensorDataGenerator_generateAckDataComplete(uint16_t packetIndex, uint16_t maxPacketIndex ,uint8_t *data) {
    data = Util_bufferUint16((unsigned char *)data, packetIndex);
    data = Util_bufferUint16((unsigned char *)data, maxPacketIndex);
}
